package com.flst.coordination;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.flst.model.Produit;
import com.flst.service.PanierService;
import com.flst.service.ProduitService;
/**
 * 
 * L'action Panier permet d'afficher la liste de produit contenue dans le singleton Panier mais aussi de passer commande
 * <p>
 * Il y a trois redirections selon les param&egrave;tres de l'url :
 * <ul>
 * <li>panier.do -> page du panier - findForward("panierPage")</li>
 * <li>panier.do?etape=validation -> page de validation de la commande - findForward("validationPage")</li>
 * <li>panier.do?etape=confirmation -> page de confirmation de la commande - findForward("confirmationPage")<br> ici le service panier vide le panier et simule l'achat en incrementant la popularit&eacute; de chaque produit du panier</li>
 * </ul>
 * </p>
 * 
 * <p>
 * Pour ajouter un produit dans le panier il suffit de passer l'id du produit dans l'url g&acirc;ce au param&egrave;tre GET "id" tel que panier.do?id=1
 * </p>
 * 
 * <p>
 * Pour supprimer un produit il suffit de passer l'id du Hashmap de produits dans l'url g&acirc;ce au param&egrave;tre GET "remove" tel que panier.do?remove=0
 *</p>
 *
 */
public class PanierAction extends Action{
	public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception {
		PanierService panierservice = new PanierService();
		ProduitService produitService = new ProduitService();
		
		
		System.out.println("etape="+request.getParameter("etape"));
		if (request.getParameter("etape")!=null &&( request.getParameter("etape").equals("validation") || request.getParameter("etape").equals("confirmation"))) 
		{
			List<Produit> produits =panierservice.getAllProduits();
			request.setAttribute("produits", produits);
			request.setAttribute("quantite", panierservice.getQuantiteArticle());
			request.setAttribute("prixTotal", panierservice.getPrixTotal());
			if(request.getParameter("etape").equals("validation")) return mapping.findForward("validationPage");
			else {
				panierservice.clearPanier();
				for (Produit produit : produits) {
					produitService.incrementProduitPopularite(produit.getId());
				}
				return mapping.findForward("confirmationPage");
			}

		}
		else {

			if (request.getParameter("id")!=null) 
			{
				int id =Integer.parseInt(request.getParameter("id"));

				panierservice.addProduit(produitService.getProduit(id));

			}
			if (request.getParameter("remove")!=null) 
			{
				Long id =(long)Integer.parseInt(request.getParameter("remove"));

				panierservice.removeProduit(id); 

			}
			request.setAttribute("produits", panierservice.getAllProduits());
			request.setAttribute("quantite", panierservice.getQuantiteArticle());
			request.setAttribute("prixTotal", panierservice.getPrixTotal());
			return mapping.findForward("panierPage");
		}
	}
}
